엄지오(32기) 디도스 사건 (비교)

r16 ➤ r17
49== [[엄지오(32기)]]의 주장에 대한 반박 ==
50저거 일단 AI 써서 자기 무관하다고 한거 같은데, 절대 아님.
51사실 디도스라는 표현 자체는 틀린게 맞는데[* 정확한것은 낮고 느린 공격= 개요 ==
52[[엄지오(32기)]]의 디도스로 인곽위키가 장장 1일동안 멈추었던 사건이다.
53희진쌤이 노트북 닫아서 그런 것이라는 말은 거짓이다.
54
55==[[엄지오(32기)]]의 주장에 대한 [[최희진(교사)]]의 입장표명==
56그 당시 노트북을 닫지 않았다!
57인곽위키가 되지 않는다 노트북을 켜야 한다는 말을 듣고 노트북을 확인했다.
58노트북 화면이 절전모드로 들어가 까만 것을 꺼진 것으로 착각하고 전원 버튼을 눌러서 꺼졌으나, 다시 켰다...
59
60== 원인 ==
61
62== 결과 ==
63[[엄지오(32기)]]는 영구 밴을 '''또''' 먹을 예정이다.
64
65==[[엄지오(32기)]]의 반박==
66> 애초에 내가 아침에 요청 보낸건 상관없고 내가 요청 끝냈을때 서버 멀쩡했음
67> 몇시간 후에 1면때 희진쌤이 실수로 정보실에 있는 서버컴 꺼서 꺼진거임
68> 증인: 김규원 김도훈 희진쌤
69[* '''하지만''' 그 다음 꺼진 것이 김준서랑 이도혜가 동시에 커밋하다가 충돌났다는 말은 반은 맞고 반은 틀리다. 당일 오후 7시에 바로 수정하여 커밋을 올리고 김준서의 노트북으로 잘 돌아갔으나 갑자기 김준서의 추가적인 최적화 안된 커밋으로 에러가 뜬 것이다.]
70
71===기술적인 반박===
72인곽위키의 조회수 증가 로직을 보면, 내가 그때 초당 1~2회 수준의 /api/v2/page_view 요청을 계속 보냈는데, 디도스라고 하는 것은 개쌉오바를 떠는거라고 볼 수 밖에 없음ㅇㅇ
73디도스는 말 그대로 서비스 거부를 일으킬 정도의 과도한 트래픽이나 분산된 요청을 뜻하는데, 애초에 디도스 할거면 초당 몇천개씩 보냈겠지
74그리고 내가 보낸 요청은 애초에 일반적으로 문서 보는것처럼 전체 문서 페이지(/w/...)를 계속 새로고침하는 것도 아님.
75그냥 문서 페이지를 열면 서버는 먼저 문서 원문을 가져오고, 렌더링을 수행한 뒤, 마지막에 별도로 조회수 증가 API를 호출함.
76근거: route/view_w.py의 320행, route/view_w.py의 336행. 코드는 깃허브에서 알아서 보셈 ㅇ
77다시 말해 /w/... 전체 요청은 “문서 조회 + 렌더 + HTML 생성 + 조회수 증가”까지 모두 포함하고 있음.
78
79근데 나는 /api/v2/page_view/... 를 직접 호출해서 그보다 훨씬 좁은 처리 경로만 이용했음.
80따라서 /api/v2/page_view 2 req/s를 /w/... 전체 페이지 2 req/s와 같은 무게로 보는 것도 오바임...
81그리고 애초에 1초에 2번 요청도 못받으면 그게 서버임??
82
83그리고 Python 레이어의 구현도 이를 뒷받침한다고 볼수있음ㅇ. 조회수 API는 Python에서 자체적으로 무거운 비즈니스 로직을 처리하는 것이 아니라, 문서명을 받아 내부 Go 프로세스로 전달하는 브리지 역할임.
84근거: route/go_api_w_page_view.py의 3행, route/tool/func.py의 150행.
85그러니까 이 경로는 구조적으로 내부 서비스에 넘겨서 카운트만 갱신하는 단순 경로라고 할 수 있음.
86내가 매 요청마다 권한 계산이나 대규모 데이터 가공을 수행같이 복잡한거 시킨것도 아니고 단순한 요청만 보냈는데 진짜 뭐가문제임??
87
88추가로 데이터베이스 부분도 함께 보자면, 인곽위키는 SQLite를 사용하지만, 초기화 시 WAL 모드를 설정함. 근거: route/tool/func.py의 258행, app.py의 130행.
89여기서 WAL은 Write-Ahead Logging의 약자인데 이게 뭐냐면 데이터를 곧바로 원본 파일에 덮어쓰는 대신 먼저 “변경 내역을 별도의 로그 파일에 기록한 뒤 나중에 반영하는 방식”인데 이 방식의 장점은 읽기와 쓰기가 동시에 일어날 때 충돌을 줄여 준다는 점임. 일반적인 SQLite 기본 모드보다 동시 접근에 더 유리해가지고, 반복 요청이 곧바로 치명적인 DB 장애로 이어지는 가능성을 낮춰 줌...
90물론 WAL이 모든 문제를 해결하는 것은 아니긴해도 인곽위키가 WAL을 쓰고있는데, 그리고 2 req/s 수준의 저속 요청 밖에 안보냈는데, 이것때문에 사이트 다운됐다고 하기엔 좀 양심이..
91애초에 2 req/s로 한시간 반 정도밖에 안했음
92
93그리고 위키 스파게티 코드문제 한두번 터지는 것도 아니고 실검 로직 이상하대서 실검 띄워지는지 해본건데
94갑자기 몇시간 후에 책임 나한테 돌리는거부터 어이가 없음 ㄹㅇ
95
96===결론 및 요약===
97내 탓 아님 밴이나 푸셈
98
99첫째, 내가 요청을 마쳤을 당시 서버는 정상 동작 중이었다.
100둘째, 요청량 자체도 디도스라고 부를 수준의 폭주성 트래픽과는 거리가 있었다.
101셋째, 희진쌤이 서버컴을 껐다[[엄지오(32기)]]의 주장에 대한 [[최희진(교사)]]의 입장표명==
102그 당시 노트북을 닫지 않았다!
103인곽위키가 되지 않는다 노트북을 켜야 한다는 말을 듣고 노트북을 확인했다.
104노트북 화면이 절전모드로 들어가 까만 것을 꺼진 것으로 착각하고 전원 버튼을 눌러서 꺼졌으나, 다시 켰다...
107저거 일단 AI 써서 자기 무관하다고 한거 같은데, 절대 아님니다.
108사실 디도스라는 표현 자체는 틀린게 맞는데[* 정확한것은 낮고 느린 공격이며, 사실상 느리게 한다는것 빼고는 서버에 과부하를 주는 디도스와 다를바가 없다.] 결론적으로는 엄지오 때문에 일어난 일은 맞음다.
109서버에서 실검 처리하는 방식이 로그를 하나하나 다 본 다음에 갯수 세는 방식[* 지금은 아님니다.]인데, 엄지오가 거기에 얼마나 많은 리퀘를 보내놓아서 터진거임이다. 추가로 에러 뜬게 524에러인데, 이게 100초 타임아웃 에러임, 즉 동기 방식의 실검을 위해 사이트를 불러오는 과정에서 엄지오의 그 많은 로그를 하나하나 서버가 보다가 100초가 넘어서 뒤진거임이다. 희진쌤이 서버컴을 꺼서 인곽위키가 닫히면 다른 에러가 떠야함한다.